package com.nkzy.controller;

import cn.hutool.core.bean.BeanUtil;
import com.nkzy.domain.dto.UserFormDTO;
import com.nkzy.domain.pojo.Result;
import com.nkzy.domain.pojo.User;
import com.nkzy.domain.vo.UserVO;
import com.nkzy.service.UserService;

import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RequestMapping("/users")//Restful风格要求请示路径用表名+s
@RestController
@CrossOrigin//后端解决跨域问题
public class UserController {
    //Controller是前后端进行数据交互的桥梁，对于后端开发人员来说：
    // 我们要给前段开发人员提供接口说明文档
    //    swagge写说明文档
    //    控制器调业务层
    //    依赖注入
    @Autowired
    private UserService userService;
    //保存数据
//    添加Post
    @PostMapping
//    summary摘要
    @Operation(summary = "保存用户信息")
    public Result saveUser(@RequestBody UserFormDTO userFormDTO){
        //1.把DTO转换为POJO对象
      User user= BeanUtil.copyProperties(userFormDTO, User.class);
        //2.调用业务层的保存的方法，完成增加用户信息
      userService.save(user);
      return Result.success();
    }
    //    2.查询一个用户信息:Get
    @GetMapping("/{id}")//Restful格式的传参
    @Operation(summary = "根据id查询一个用户信息")
//    根据路径返回附给id
    public Result getUser(@PathVariable Long id){
        //1.调用业务层查询一个用户信息
        User user=userService.getById(id);
//        2.把POJO对象转换为VO对象
        UserVO userVO= BeanUtil.copyProperties(user,UserVO.class);
//        3.返回VO对象
        return Result.success(userVO);
    }
    //    3.删除一个用户信息
    @DeleteMapping("/{id}")
    @Operation(summary = "根据id删除一个用户信息")
//    @PathVariable路径参数
    public Result deleteUser(@PathVariable Long id){
        //1.调用业务层删除用户信息
        userService.removeById(id);
        return Result.success();
    }
//    4根据id的集合查询多个用户
    @GetMapping
    @Operation(summary = "根据id集合查询多个用户信息")
//    @RequestParam("ids")请求参数
    public Result getUsers(@RequestParam("ids") List<Long> ids){
        //1.调用业务层查询多个用户信息
        List<User> users=userService.listByIds(ids);
        //2.把POJO对象转换为VO对象
//        VO展示 DtO保存
        List<UserVO> userVO=BeanUtil.copyToList(users,UserVO.class);
    return Result.success(userVO);
    }
//    5查(Get)询所有用户
    @GetMapping("/all")
    @Operation(summary = "查询所有用户信息")
    public Result getAllUsers(){
        //1.调用业务层查询所有用户信息
        List<User> users=userService.list();
        //2.把POJO对象转换为VO对象
        List<UserVO> userVO=BeanUtil.copyToList(users,UserVO.class);
    return Result.success(userVO);
    }
//    6修改一个用户
    @PutMapping
    @Operation(summary = "修改一个用户信息")
    public Result updateUser(@RequestBody UserFormDTO userFormDTO){
        //1.把DTO转换为POJO对象
        User user=BeanUtil.copyProperties(userFormDTO,User.class);
        //2.调用业务层修改用户信息
        userService.updateById(user);
       return Result.success();
    }
}
//Get 查
//Post 保存
//del 删除
//put 更新